package BD;
/*atual*/
import java.sql.*;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;//

public class pedidos extends bd {
/*id_produtos, descricao, custo, qtdatual, unidade, volume*/
    private int  id_pedidos  = 0   ;
    private int  id_clientes = 0   ;
    private int  mesa        = 0   ;
    private Timestamp data;
    private Time hora;
    private float valor  = 0;
    private String siuacao = "A";
    private boolean finalizado ;    
    private String  cliente_nome ="";
    public  int TipoTela = 0;//1 entrega 2mesa
    private ArrayList<pedidos_Itens> listitens = new ArrayList<pedidos_Itens>();
    
    public boolean pesqfinalizado = false;
    private utilsPim utl = new utilsPim();
    

    public ArrayList<pedidos_Itens> getListitens() {
        return listitens;
    }

    public void setListitens(ArrayList<pedidos_Itens> listitens) {
        this.listitens = listitens;
    }

    public Time getHora() {
        return hora;
    }

    public void setHora(Time hora) {
        this.hora = hora;
    }

    public String getCliente_nome() {
        return cliente_nome;
    }

    public void setCliente_nome(String cliente_nome) {
        this.cliente_nome = cliente_nome;
    }

    public int getId_pedidos() {
        return id_pedidos;
    }

    public void setId_pedidos(int id_pedidos) {
        this.id_pedidos = id_pedidos;
    }

    public int getId_clientes() {
        return id_clientes;
    }

    public void setId_clientes(int id_clientes) {
        this.id_clientes = id_clientes;
    }

    public int getMesa() {
        return mesa;
    }

    public void setMesa(int mesa) {
        this.mesa = mesa;
    }

    public Timestamp getData() {
        return data;
    }

    
    public void setData(Timestamp data) {
        this.data = data;
    }

    public float getValor() {
        return valor;
    }

    public void setValor(float valor) {
        this.valor = valor;
    }

    public String getSiuacao() {
        return siuacao;
    }

    public void setSiuacao(String siuacao) {
        this.siuacao = siuacao;
    }

    public boolean getFinalizado() {
        return finalizado;
    }

    public void setFinalizado(boolean finalizado) {
        this.finalizado = finalizado;
    }
    
    
    public boolean incluir() {            
        try {
            if (!estaConectado()) 
                conecta();          
            stmt = getConexao().createStatement();          
           //id_pedido, id_cliente, mesa, data, hora, situacao finalizado
         //id_pedidos, id_clientes, mesa, data, hora, situacao, finalizado)            
            sql = "INSERT INTO pedidos "
                    +"VALUES ((select coalesce(max(id_pedidos)+1,1) from pedidos),"
                    +"'"+ Integer.toString(this.getId_clientes())+ "', "
                    +"'"+ Integer.toString(this.getMesa())+ "', "                    
                    +"'"+ utl.getDataHoraHoje()+"',"
                    +"'"+ utl.getHoraHoje() +"',"
                    +"'"+ "A"+"',"
                    +"'"+ Boolean.toString(this.finalizado)+"');";
//            JOptionPane.showMessageDialog(null,sql);
                    
            stmt.executeUpdate(sql);
            stmt.close();            
            return true;
        } catch (SQLException objErro) {
            JOptionPane.showMessageDialog(null, "Não foi possível executar  Query \n" + objErro.getMessage());
            return false;
        }
    }

    public boolean alterar() {
           //id_compras, id_fornecedor, id_produto, id_vendedor, valor, qtd)        
        try {
            if (!estaConectado()) 
                conecta();          

            stmt = getConexao().createStatement();          
            sql = "update pedidos "+
                  "SET id_clientes='"+ Integer.toString(this.getId_clientes()) + "', "+
                  "mesa='"+ Integer.toString(this.getMesa())+ "', "+
                  "situacao='"+ this.getSiuacao()+ "', "+
                  "finalizado='"+ Boolean.toString(this.getFinalizado())+ "' "+

                  " where id_pedidos='"+ Integer.toString(this.getId_pedidos())+"';";
                   
            stmt.executeUpdate(sql);
            stmt.close();
            //System.out.print(this.sql);
            return true;
        } catch (SQLException objErro) {
            JOptionPane.showMessageDialog(null, "Não foi possível executar a Query altarar peedido \n" + objErro.getMessage());
            return false;
        }

    }

    public ResultSet consultar() {
        if (!estaConectado()) {
            conecta();
        }
        try {
            stmt = getConexao().createStatement();
            sql =    " SELECT pedidos.id_pedidos,pedidos.situacao, pedidos.id_clientes, pedidos.mesa, pedidos.data, pedidos.hora, pedidos.finalizado,"
                    +"       clientes.nome ,"
                    +" coalesce("
                    +"	(select sum(pedidos_itens.valor) "
                    +"	from pedidos_itens "
                    +"	where pedidos_itens.id_pedidos=pedidos.id_pedidos"
                    +"	) ,0 ) as valor"
                    +" FROM pedidos  "
                    +" left join clientes  on (clientes.id_clientes=pedidos.id_clientes) "
                    +" WHERE 1=1 ";
            
            if( this.id_pedidos > 0){
                sql = sql + " and pedidos.id_pedidos = '"+this.id_pedidos+"'";                
            }
            if(! this.siuacao.equals("")){
                sql = sql + " and pedidos.situacao = '"+this.siuacao+"'";
            }
                    
            if (! this.cliente_nome.equals("") ){
                sql = sql + " AND clientes.nome like  '%"+this.cliente_nome+"%'";
            }                        
            if (this.id_clientes != 0){
                sql = sql + " AND clientes.id_clientes = '"+Integer.toString(this.getId_clientes())+"'";
            }            
            
            if (this.mesa != 0 ){
                sql = sql + " AND pedidos.mesa ='"+Integer.toString(this.mesa)+"'";
            }
            if(this.pesqfinalizado)
                sql = sql + " AND pedidos.finalizado ='"+Boolean.toString(this.finalizado)+"'";
            
            if(this.TipoTela > 0){
                if(this.TipoTela == 1)
                    sql = sql +" AND ((not pedidos.id_clientes is null)or(pedidos.id_clientes <> 0)) and pedidos.mesa = 0" ;
                else
                    sql = sql +" AND ((not pedidos.mesa is null)or(pedidos.mesa <> 0)) and pedidos.id_clientes = 0";
            }
           //JOptionPane.showMessageDialog(null,sql);
            rs = stmt.executeQuery(sql);
            return rs;
            
            
        } catch (SQLException objErro) {
            JOptionPane.showMessageDialog(null, "Não foi possível executar a Query Pedido\n" + objErro.getMessage());
            return null;
        }
        
    }
    
    public ArrayList<pedidos> getItens(){
        ArrayList<pedidos> itens = new ArrayList<pedidos>();

        rs = this.consultar();
        try{
            while(rs.next()){
                //id_pedido, id_cliente, mesa, data, hora, valor,situacao finalizado                                
                pedidos       obj  = new pedidos();
                pedidos_Itens obji = new pedidos_Itens();
                ArrayList<pedidos_Itens> listiten = new ArrayList<pedidos_Itens>();           

                obj.setId_pedidos(rs.getInt("id_pedidos"));
                obj.setId_clientes(rs.getInt("id_clientes"));
                obj.setMesa(rs.getInt("mesa"));
                obj.setData(rs.getTimestamp("data"));
                obj.setHora(rs.getTime("hora"));
                obj.setValor(rs.getFloat("valor"));
                obj.setSiuacao(rs.getString("situacao"));
                obj.setFinalizado(rs.getBoolean("finalizado"));
                obj.setCliente_nome(rs.getString("nome"));
                
                obji.setId_pedidos(rs.getInt("id_pedidos"));
                listiten = obji.getItens();
                obj.setListitens(listiten);
                itens.add(obj);
            }
            stmt.close();
            disconecta();
        }
        catch(SQLException erro){
            msgErro = erro.getMessage();            
            JOptionPane.showMessageDialog(null,"Pedidos"+ msgErro);
        }        
        return itens;
    }
    
    public boolean excluir() {
        if (!estaConectado()) {
            conecta();
        }        
        try {
            stmt = getConexao().createStatement();                      
            sql ="delete from pedidos "+                  
                 "where id_pedidos = "+ Integer.toString(this.id_pedidos);            
            stmt.execute(sql);                        
            return true;
        } catch (SQLException objErro) {
            JOptionPane.showMessageDialog(null, "Não foi possível  a Query \n" + objErro.getMessage());
            return false;
        }
    } 
    public boolean finalizarpedido(){
        try {
            if (!estaConectado())conecta();          

            stmt = getConexao().createStatement();          
            sql = "update pedidos SET "+
                  "situacao='"+ "F"+ "', "+
                  "finalizado='"+ Boolean.toString(true)+ "' "+
                  " where id_pedidos='"+ Integer.toString(this.getId_pedidos())+"';";
                   
            stmt.executeUpdate(sql);
            stmt.close();
            return true;
        } catch (SQLException objErro) {
            JOptionPane.showMessageDialog(null, "Não foi possível executar a Query finalizar pedido \n" + objErro.getMessage());
            return false;
        }       
    }
    public boolean CANCELARPEDIDO(){
        pedidos pd = new pedidos();
        pd = this;
        pd.setSiuacao("C");
        return pd.alterar();
    }

    public static void main(String []args){
         ArrayList<pedidos> listped = new ArrayList<pedidos>();
         pedidos ped = new pedidos();
//         ped.setMesa(1);
         ped.setId_pedidos(2);
         //ped.incluir();
        
//         pedidos_Itens pedi = new pedidos_Itens();
//         ped.setMesa(2);;
         listped = ped.getItens();
         
         System.out.println("size "+listped.size());
         
         System.out.println("Mesa:"+listped.get(0).getMesa());
         System.out.println("tmanho:"+listped.get(0).getListitens().get(0).getPizzas().getTamanho());
         System.out.println("tmanho:"+listped.get(0).listitens.get(0).getDesc_pizzas());
//getListitens().get(0).getPizzas().getValor()         
//         System.out.println(listped.get(0).getListitens().get(0).getDesc_pizzas());;
    

    }
    
    
}
